<%@page import="javax.xml.namespace.QName"%>
<%@page import="java.net.URL"%>
<%@page import="Proxies.CtrlDocumentosWSService"%>
<%@page import="Proxies.CtrlDocumentosWS"%>
<%@page import="Proxies.CtrlAgregarEntradaMuroWS"%>
<%@page import="Proxies.CtrlAgregarEntradaMuroWSService"%>
<%@page import="Proxies.DataUsuario"%>
<%@ page import="java.util.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.*" %>
<%@ page import="java.io.*" %>

<%

    /*FileItemFactory es una interfaz para crear FileItem*/

    FileItemFactory file_factory = new DiskFileItemFactory();

    /*ServletFileUpload esta clase convierte los input file a FileItem*/
    ServletFileUpload servlet_up = new ServletFileUpload(file_factory);

    /*sacando los FileItem del ServletFileUpload en una lista */
    List items = servlet_up.parseRequest(request);

    DataUsuario usr = (DataUsuario) session.getAttribute("usr");
    String nomContenido = null;
    String tipoContenido = null;
    File archivo_server = null;
    String duenoMuro = null;
    byte archCodificado[] = null;
    String nomArchivo = null;

    for (int i = 0; i < items.size(); i++) {
        /*FileItem representa un archivo en memoria que puede ser pasado al disco duro*/
        FileItem item = (FileItem) items.get(i);
        /*item.isFormField() false=input file; true=text field*/
        if (!item.isFormField()) {
            if (!(new File("C:\\Subidos\\")).exists()) {
                (new File("C:\\Subidos\\")).mkdir();
            }

            /*cual sera la ruta al archivo en el servidor*/
            archivo_server = new File("C:\\Subidos\\" + item.getName());
            item.write(archivo_server);
            nomArchivo = item.getName();
            
            InputStream is = new FileInputStream(archivo_server);

            // Get the size of the file
            long length = archivo_server.length();

            // You cannot create an array using a long type.
            // It needs to be an int type.
            // Before converting to an int type, check
            // to ensure that file is not larger than Integer.MAX_VALUE.
            if (length > Integer.MAX_VALUE) {
                // File is too large
            }

            // Create the byte array to hold the data
            archCodificado = new byte[(int)length];

            // Read in the bytes
            int offset = 0;
            int numRead = 0;
            while (offset < archCodificado.length
                   && (numRead=is.read(archCodificado, offset, archCodificado.length-offset)) >= 0) {
                offset += numRead;
            }

            // Ensure all the bytes have been read in
            if (offset < archCodificado.length) {
                throw new IOException("Could not completely read file "+archivo_server.getName());
            }

            // Close the input stream and return bytes
            is.close();

            /*InputStream is = new FileInputStream(archivo_server);
            archCodificado = new byte[(is.available() / 40)];*/

            /*y lo escribimos en el servidor*/
        } else {
            if (item.getFieldName().equals("nomContenido")) {
                nomContenido = item.getString();
            }
            if (item.getFieldName().equals("tipoContenido")) {
                tipoContenido = item.getString();
            }
            if (item.getFieldName().equals("mailMuro")) {
                duenoMuro = item.getString();
            }
        }
    }
    String IP = (String) session.getAttribute("SERVIDOR");
    URL dirDocs = new URL(IP + "CtrlDocumentos?wsdl");
    QName qNaDocs = new QName("http://WebServices/", "CtrlDocumentosWSService");
    CtrlDocumentosWS ctrl = new CtrlDocumentosWSService(dirDocs, qNaDocs).getCtrlDocumentosWSPort();
    ctrl.saveOnServer(archCodificado, nomArchivo, false, duenoMuro);
    
    URL dirMuro = new URL(IP + "CtrlAgregarEntradaMuro?wsdl");
    QName qNaMuro = new QName("http://WebServices/", "CtrlAgregarEntradaMuroWSService");
    CtrlAgregarEntradaMuroWS ctrlAgregar = new CtrlAgregarEntradaMuroWSService(dirMuro, qNaMuro).getCtrlAgregarEntradaMuroWSPort();
    
    ctrlAgregar.agregarContDocumento(nomContenido, nomArchivo, duenoMuro, usr.getCorreo(), "Documento");

    response.sendRedirect("perfil.jsp");

%>
